Tracing execution of software is an important part of the software development process and can provide a variety of useful information for improving software. For example, as software becomes more complex, it becomes ever more challenging to preserve acceptable performance. An important part of improving the performance of a software program is program tracing. Tracing allows developers to retrace a program's steps. In practice, automated tools can analyze program traces and provide performance-related information to developers, who can then address performance problems or otherwise enhance performance.
However, tracing execution is not a simple matter. Observing the execution of a program tends to alter its execution or slow it down dramatically. Some high quality hardware-based instruction tracing solutions are available, but limitations in performance make such solutions impractical, especially for software of any significant size or complexity.
There is therefore room for improvement.